package com.itheima.d9_generics_attention;

import java.util.ArrayList;

/*
    泛型的注意事项
        1、泛型是工作在编译阶段的，一旦程序编译成class文件，class文件中就不存在泛型了，这就是泛型擦除。
        2、泛型不支持基本数据类型，只能支持对象类型（引用数据类型）
 */
public class Test {
    public static void main(String[] args) {
        ArrayList<Car> cars = new ArrayList<>();
        ArrayList<QiChe> qicheS = new ArrayList<>();
        ArrayList<MoTuo> moTuos = new ArrayList<>();
        ArrayList<DuKaDi> duKaDis = new ArrayList<>();
        test3(cars);
        test2(duKaDis);
        test2(qicheS);
        test2(moTuos);
//        test3(DuKaDi);


    }
    //类型变量定义泛型方法
    public static <T> void test(T t){

    }

    //通配符定义泛型方法
    public static void test1(ArrayList<?> c){

    }
    //通配符决定传入类型上限
    //所有继承Cars的类都能用
    public static void test2(ArrayList<? extends Car> c){

    }
    //通配符决定下限
    //所有moTuo的父类都能用
    public static  void test3(ArrayList<? super MoTuo> c){

    }
}
class Car{}
class QiChe extends Car{}
class MoTuo extends Car{}
class DuKaDi extends MoTuo{}